package com.powernode.lambda.base;

import java.util.function.BinaryOperator;

/**
 * lambda表达式底层
 * JDK会替我们生成函数式接口的实现类和方法，只是我们看不见
 */
public class base01 {
    BinaryOperator<Integer> lambda = (a, b) -> a + b;

    /**
     *             lambda 表达式是一种语法糖，它仍然会被翻译成 类、对象、方法
     *             1. 方法从哪来 : 编译器发现代码中出现了 lambda，就会在当前类中生成 private static 方法，方法内包含的就是 lambda 的逻辑
     *                 实验代码
     *             2. 类和对象从哪来 : 运行期间动态生成
     */

    //JDK会帮我们在内存中生成如下类似的实现类和方法
    static final class MyLambda implements BinaryOperator<Integer> {
        @Override
        public Integer apply(Integer a, Integer b) {
            return lambda$main$2(a, b);
        }
    }

    private static Integer lambda$main$2(Integer a, Integer b) {
        return a + b;
    }

}
